技术开发 频道

ASP.NET4与VS2010Web开发核心服务改进

  【IT168专稿】本系列文章将向您全面介绍在.NET框架4和Visual Studio 2010环境下进行ASP.NET 4 Web开发的新特征支持。具体来说,本系列文章将细分为核心服务篇、Microsoft Ajax Library新特征篇、Web表单篇、ASP.NET MVC篇、动态数据篇、Visual Studio 2010 Web设计器改进篇、使用Visual Studio 2010部署Web应用程序篇等。

  ASP.NET 4中引入了许多改进核心ASP.NET服务的新特征,例如输出缓存和会话状态存储等,本文为系列的第一篇,将向您详细讨论核心ASP.NET服务方面的改进。

  一、Web.config文件重构

  Web.config文件包含了Web应用程序极其重要的配置信息,在过去几年推出的.NET框架中已经在多方面进行了巨大的改进。例如Ajax支持、路由控制以及与IIS 7的整合等一些新的功能被增加到这个文件中来。这种情况也导致了一个问题:当不使用像Visual Studio这样的工具时难以配置或启动一个新的Web应用程序。

  在.NET框架4中,主要的配置元素已被转移到Machine.config文件中,现在应用程序可以从这些设置中进行继承。这使得ASP.NET 4中的Web.config文件或者为空或者只包含如下所示的几行信息(其中向Visual Studio指出应用程序将运行于哪个版本的.NET框架上)。

<?xml version="1.0"?>
  
<configuration>
  
<system.web>
    
<compilation targetFramework="4.0" />
  
</system.web>
  
</configuration>

   二、可扩展的输出缓存

  自从ASP.NET 1.0发布以来,输出缓存使开发人员能够把由网页、控件及HTTP响应等生成的输出内容存储到内存中。这样一来,在后面的Web请求时,系统能够从内存检索这些生成的输出内容而不是从头开始重新生成输出,从而使ASP.NET可以更迅速地提供内容。但是,这种方法也有一个限制—生成的内容一定要存储在内存中。这样一来,服务器将承受巨大流量带来的压力,输出缓存消耗的内存与来自Web应用程序的其他部分的内存需求之间导致严重冲突。

  针对上述情况,ASP.NET 4针对输出缓存增加了一个扩展点,能够使您可以配置一个或多个自定义输出缓存提供程序。输出缓存提供程序可以使用任何的存储机制来存储HTML内容。这使得开发者有可能针对不同的持久性机制创建自定义的输出缓存提供程序,其中可以包括本地或远程磁盘,云存储和分布式缓存引擎等等。

  具体实现思路是,您可以通过从新的System.Web.Caching.OutputCacheProvider类中派生一个类来创建自定义输出缓存提供程序。然后,您可以通过使用OutputCache元素的新的providers节在Web.config文件中配置提供程序,如下面的示例所示:

<caching>
<outputCache defaultProvider="AspNetInternalProvider">
  
<providers>
  
<add name="DiskCache"
    type
="Test.OutputCacheEx.DiskOutputCacheProvider, DiskCacheProvider"/>
  
</providers>
</outputCache>
</caching>

   默认情况下,在ASP.NET 4中,所有的HTTP响应、生成的网页以及控件都使用内存输出缓存,如前面的例子所示,其中defaultProvider属性被设置为AspNetInternalProvider。您可以更改一个Web应用程序中所使用的默认的输出缓存提供程序—这是通过为defaultProvider指定一个不同的提供程序名称实现的。

  此外,您还可以针对每个控件和每个请求选择不同的输出缓存提供程序。为不同的Web用户控件选择不同的输出缓存提供程序的最简单的方法是,在一个网页或控件的指令中以声明方式使用新的ProviderName属性,如下面的示例所示:

<%@ OutputCache Duration="60" VaryByParam="None" providerName="DiskCache" %>

    为一个HTTP请求指定一个不同的输出缓存提供程序需要更多一点的工作。你不是使用声明方式来指定提供程序,而是在Global.asax文件中通过重载新的GetOuputCacheProviderName方法以编程方式指定针对一个具体的请求使用哪一个提供程序。下面的示例演示了如何做到这一点。

public override string GetOutputCacheProviderName(HttpContext context)

  {

  if (context.Request.Path.EndsWith("Advanced.aspx"))

  return "DiskCache";

  else

  return base.GetOutputCacheProviderName(context);

  }

  随着在ASP.NET 4中增加输出缓存提供程序扩展,您现在可以为您的网站采取更积极和更智能化的输出缓存策略。例如,现在有可能把一个网站中的用户访问量占“前十名”的那些网页缓存到内存中,而把那些较低访问量的网页缓存到磁盘上。此外,您还可以针对一个呈现的页面缓存每一个VaryBy组合(译者注:请参考ASP.NET缓存技术中的VaryByParam参数相关用法)而使用分布式缓存,从而减轻前端Web服务器的内存消耗。

  

0
相关文章